package cn.uce.cc.srv.biz.impl;

import javax.annotation.Resource;

import cn.uce.base.entity.CcosNetDistrict;
import cn.uce.base.page.Pagination;
import cn.uce.base.vo.CcosNetDistrictVo;
import cn.uce.cc.api.service.biz.ICcosNetDistrictBiz;
import cn.uce.cc.srv.service.CcosNetDistrictService;
import cn.uce.common.constants.RedisKeyConstant;
import cn.uce.common.utils.RedisUtils;
import cn.uce.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import cn.uce.base.page.Page;

import java.util.List;
import java.util.Map;


/**
 * @Description: BIZ实现类
 * @author UCE-CodeGenerator
 * @date 2020年06月29日 下午04:57:46
 */
@Service("ccosNetDistrictBiz")
public class CcosNetDistrictBiz implements ICcosNetDistrictBiz {



	private static final Logger log = LoggerFactory.getLogger(CcosNetDistrictBiz.class);


	@Resource
	RedisUtils redisUtils;

	/**
	 * 注入Service
	 */
	@Resource
	private CcosNetDistrictService ccosNetDistrictService;
	
	/**
	 * @Description: 新增
	 * @param ccosNetDistrict
	 * @return 受影响行数
	 * @author UCE-CodeGenerator
	 * @date 2020年06月29日 下午04:57:46
	 */
	public int addCcosNetDistrict(CcosNetDistrict ccosNetDistrict) {
		return ccosNetDistrictService.addCcosNetDistrict(ccosNetDistrict);
	}
	
	/**
	 * @Description: 修改
	 * @param ccosNetDistrict 
	 * @return 受影响行数
	 * @author UCE-CodeGenerator
	 * @date 2020年06月29日 下午04:57:46
	 */
	public int updateCcosNetDistrict(CcosNetDistrict ccosNetDistrict) {
		return ccosNetDistrictService.updateById(ccosNetDistrict);
	}
	
	/**
	 * @Description: 删除
	 * @param id 主键
	 * @return 受影响行数
	 * @author UCE-CodeGenerator
	 * @date 2020年06月29日 下午04:57:46
	 */
	public int deleteCcosNetDistrict(Long id) {
		return ccosNetDistrictService.deleteById(id);
	}
	
	/**
	 * @Description: 根据ID查询
	 * @param id 主键
	 * @return 
	 * @author UCE-CodeGenerator
	 * @date 2020年06月29日 下午04:57:46
	 */
	@Override
	public CcosNetDistrict findById(Long id) {
		return ccosNetDistrictService.findById(id);
	}
	
	/**
	 * @Description: 分页查询
	 * @param ccosNetDistrictVo 
	 * @param page 分页参数
	 * @return 
	 * @author UCE-CodeGenerator
	 * @date 2020年06月29日 下午04:57:46
	 */
	public Pagination<CcosNetDistrict> findByPagination(CcosNetDistrictVo ccosNetDistrictVo, Page page) {
		Pagination<CcosNetDistrict> pagination = ccosNetDistrictService.findByPagination(ccosNetDistrictVo, page);
		return pagination;
	}

	/**
	 * 根据code 去ccos地址库里查询地址
	 * 首先查询redis中是否存在,若存在则返回redis中数据
	 * 若不存在则进行查询数据库
	 * redis缓存时间设置为1天
	 * @param areaCode
	 * @return 地址名称
	 * @Author liupan
	 * @Description
	 * @Date  2020-06-29 17:39
	 */
	@Override
	public String areaCodeToName(String areaCode) {
		if (StringUtil.isNotBlank(areaCode)) {
			String redisValue = redisUtils.getString(RedisKeyConstant.CCOS_AREA_REDIS_KEY+":"+areaCode);
			if (StringUtil.isNotBlank(redisValue)){
				return redisValue;
			}
			CcosNetDistrict ccosNetDistrict = new CcosNetDistrict();
			ccosNetDistrict.setCode(Long.valueOf(areaCode));
			ccosNetDistrict = ccosNetDistrictService.findAreaByCode(ccosNetDistrict);
			String mergerName = ccosNetDistrict.getMergerName();
			if (StringUtil.isNotBlank(mergerName)){
				redisUtils.putString(RedisKeyConstant.CCOS_AREA_REDIS_KEY+":"+areaCode , mergerName , 86400);
				return redisValue;
			}
		}
		return "";
	}


	 /**
	   * 根据level_type与parentCode去查询机构信息
	  *
	   * @Author liupan
	   * @Description
	   * @Date  2020-07-07 16:15
	   */
	@Override
	public List<Map<String, Object>> getAreaCodeByCondition(CcosNetDistrictVo ccosNetDistrictVo) {
	if (ccosNetDistrictVo != null && StringUtil.isNotBlank(ccosNetDistrictVo.getLevelType())){
		//根据parentCode和类型去查询
		if (StringUtil.isNotBlank(ccosNetDistrictVo.getParentCode())) {
			return ccosNetDistrictService.getAreaCodeByCondition(ccosNetDistrictVo);
		} else {
			//查询全国的所有省份
			return ccosNetDistrictService.getProvince();
		}
	}
	return null;



	}
}